A technique known as “chunking” has been used in the field of three-dimensional (3-D) computer graphics to improve the performance of graphics subsystems. In chunking, a complete display may be divided into a number of portions, called “chunks”, and the display may be rendered one chunk at a time. A chunk may be, for example, a 32-by-32 pixel portion of the display. An advantage of chunking is that a chunk is generally small enough to be stored on chip (i.e., on the graphics accelerator/controller). Also, chunking may reduce the bus bandwidth requirements between a video memory and a rasterizer, which is the primary bottleneck in most conventional 3-D graphics subsystems. However, chunking generally achieves these benefits at the expense of increased host-to-controller data traffic and increased video memory requirements for geometry data.
Graphics data is generally represented using sets of primitives, such as polygons and/or lines. A triangle is a commonly used primitive, for example. Each triangle has a “span”, which can be defined as the set of chunks overlapped by the triangle's bounding rectangle. Traditional chunking approaches allocate a bin (of triangles) for each chunk of the display. Consequently, a triangle to be rendered is assigned to each bin that corresponds to a chunk in the triangle's span. Thus, if a triangle's span includes five chunks, for example, the triangle is assigned to the bins corresponding to each of those five chunks. The host then directs the graphics controller to process the associated bin for each chunk. The problem with this approach is that the host must deliver a triangle to the graphics controller once for each chunk in the triangle's span. Thus, if a triangle's span includes N chunks, the host delivers that triangle to the graphics controller N times. In addition, the triangle data is replicated in video memory N times, once in each of the N bins.
Therefore, it is desirable to have a 3-D computer graphics technique that not only reduces video memory requirements and video memory-to-rasterizer bandwidth requirements but also reduces bandwidth requirements between the host and the graphics controller.